package cn.jsj.hzu.qm.facecloud.ciuser.dao.impl;

import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import cn.jsj.hzu.qm.facecloud.ciuser.dao.CiuserDao;
import cn.jsj.hzu.qm.facecloud.ciuser.pojo.Ciuser;
import cn.jsj.hzu.qm.facecloud.utils.Page;

/**
 * 用户DAo层的实现类
 * */
public class CiuserDaoImpl implements CiuserDao{

	// Spring提供的简化访问的方法
	JdbcTemplate jdbcTemplate = null;
	
	//获取jdbcTemplate, 需要在Spring.xml配置才能正常工作
	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	//增
	
	public int addCiuser(Ciuser ciuser) {
		
		//SQL语句
		String sql = "INSERT INTO tb_ciuser VALUES (null, ?, ?, ?,   ?, ?, ?,   ?, NOW(), NOW(),  ?, null         , null, null, 0, null)";
		
		/**
		 * i: 受影响的行数，增加一行，该值应该是1
		 * */
		int i = jdbcTemplate.update(sql, new Object[] {
				ciuser.getSid(), ciuser.getName(), ciuser.getPassword(),//4
				ciuser.getEmail(),ciuser.getIs_available(), ciuser.getType(), ciuser.getMemo(),//4
				 ciuser.getJsonmessage()//3
				 
				});
		
		return i;
	}
	//删
	//改
	@Override
	public int modifyCiuser(Ciuser ciuser) {
		
		//SQL语句
		String sql = "UPDATE tb_ciuser SET `name`=?, `password`=?, email=?, is_available=?, type=?, memo=?, modifytime=NOW(), jsonmessage=?, photopath=?,     activation_code=?, activation_code_end=?, number_of_times=?, pass_by=?  WHERE id=?";
		
		/**
		 * i: 受影响的行数，修改一行，该值应该是1
		 * */
		int i = jdbcTemplate.update(sql, new Object[] {
				ciuser.getName(), 
				ciuser.getPassword(), 
				ciuser.getEmail(), 
				
				ciuser.getIs_available(), 
				ciuser.getType(), 
				ciuser.getMemo(), 
				
				ciuser.getJsonmessage(), 
				ciuser.getPhotoPath(),
				
				ciuser.getActivation_code(),
				ciuser.getActivation_code_end(),
				ciuser.getNumber_of_times(),
				ciuser.getPass_by(),
				
				
				ciuser.getId()
				
				
		});
		return i;
	}
	//查
	////////////////////////////////////////两种按sid查询/////////////////////////////////
	/**
	 * 
	 * 此查既能查询到启用的用户，也能查询到禁用的用户
	 */
	@Override
	public Ciuser findCiuserBySid(String sid) {
		//SQL语句
		String sql = "SELECT * FROM tb_ciuser WHERE sid=?";
		//用于保存结果的实体类
		Ciuser ciuser;
		
		try {
			//执行，获取实体类
			ciuser = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {sid});
			System.out.println(ciuser);
			return ciuser;
		} catch (Exception e) {
//			e.printStackTrace();
			System.out.println("没有查询到数据");
			return null;
		}
	}
	
	@Override
	public Ciuser findCiuserBySid(String sid, boolean isAll) {
		
		// 屏蔽禁用的用户
		if (isAll == false) {
			
			//SQL语句
			String sql = "SELECT * FROM tb_ciuser WHERE sid=? AND is_available=1";
			//用于保存结果的实体类
			Ciuser ciuser;
			
			try {
				//执行，获取实体类
				ciuser = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {sid});
				System.out.println(ciuser);
				return ciuser;
			} catch (Exception e) {
//				e.printStackTrace();
				System.out.println("没有查询到数据");
				return null;
			}
		}
		else {
			
			return findCiuserBySid(sid);
		}
	}
	
	@Override
	public Ciuser findCiuserBySid(int id) {
		String sql = "SELECT * FROM tb_ciuser WHERE id=?";
		
		Ciuser ciuser;
		
		try {
			ciuser = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {id});
			System.out.println(ciuser);
			return ciuser;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("没有查询到数据");
			return null;
		}
	}
	
	@Override
	public Ciuser findCiuserByAactivation_code(String activation_code) {
		String sql = "SELECT * FROM tb_ciuser WHERE activation_code=?";
		
		Ciuser ciuser;
		
		try {
			ciuser = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {activation_code});
			System.out.println(ciuser);
			return ciuser;
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("没有查询到数据");
			return null;
		}
	}
	
	
	
	public List<Ciuser> getAllCiusers() {
		String sql = "SELECT * FROM tb_ciuser";
		//从表中查询所有实体类，保存到List中
		List<Ciuser> ciusers = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Ciuser.class));
		
		return ciusers;
	}

	/**
	 * 按用户类型，分页查询用户
	 * （即用户type）
	 * */
	@Override
	public List<Ciuser> getUsersByType(int type, Page page) {

		int start = page.getStart();
		int length = page.getLength();
		
		String sqlString = "SELECT * FROM tb_ciuser WHERE type=? AND is_available=1 ORDER BY modifytime DESC, id LIMIT ?,?";
		
		List<Ciuser> ciusers = null;
		
		try {
			ciusers = jdbcTemplate.query(sqlString, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {type, start, length});
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		return ciusers;
	}
	
	/**
	 * 按用户类型，分页查询被禁用的用户
	 * （即用户type）
	 * */
	@Override
	public List<Ciuser> getNotAvailableUsersByPage(Page page) {

		int start = page.getStart();
		int length = page.getLength();
		
		String sqlString = "SELECT * FROM tb_ciuser WHERE is_available=0 ORDER BY modifytime DESC, id LIMIT ?,?";
		
		List<Ciuser> ciusers = null;
		
		try {
			ciusers = jdbcTemplate.query(sqlString, new BeanPropertyRowMapper<>(Ciuser.class), new Object[] {start, length});
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		
		return ciusers;
	}
	/**
	 * 按用户类型，查询用户总数
	 * （即用户type）
	 * */
	@Override
	public int getUsersSumByType(int type) {
		String sqlString = "SELECT COUNT(*) FROM tb_ciuser WHERE type=? ";
		
		int i = jdbcTemplate.queryForObject(sqlString, Integer.class, new Object[] {type});
		return i;
	}
	
	/**
	 * 查询被禁用的用户总数
	 * （即用户type）
	 * */
	@Override
	public int getNotAvailableUsersSumByType() {
		String sqlString = "SELECT COUNT(*) FROM tb_ciuser WHERE is_available=0";
		
		int i = jdbcTemplate.queryForObject(sqlString, Integer.class);
		return i;
	}
	
	
	
	
	
}
